package
{
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.utils.setTimeout;
	
	import mx.containers.Accordion;
	import mx.containers.Panel;
	import mx.containers.ViewStack;
	import mx.controls.LinkButton;
	
	public class GraphicInitialiser
	{
		
		private var filesDirectory:String = "fr/pages/";
		private var viewstackToShow:ViewStack;
		private var accordionToShow:Accordion;
		private var arrayPages:Array;
		private var pageFacto:PageFactory;
		private var panelNews:Panel;
		
		private function onPauseComplete():void{
			changerPage("acceuil");
		}
		
		/**
		 * Cette méthode est lancée à l'initialisation de UM2.mxml
		 * @param viewstack le viewstack du fichier um2.mxml
		 * @param accordion l'accordion du fichier um2.mxml
		 */ 
		public function GraphicInitialiser(viewstack:ViewStack, accordion:Accordion,panelNews:Panel)
		{
			this.viewstackToShow = viewstack;
			this.accordionToShow = accordion;
			this.panelNews = panelNews;
			arrayPages = new Array();
			pageFacto = new PageFactory(viewstack);
			pageFacto.createNewPage("acceuil");
			var actuParser:ActualitesParser = new ActualitesParser(panelNews,this);
			setTimeout(onPauseComplete,1000);
			
		}
		
		
		
		/**
		 * Cette function est appellée lors du clic sur un bouton pour effectuer le changement de page
		 * @newPage l'identifiant de la nouvelle page à afficher
		 */ 
		public function changerPage(newPage:String):void{
			var bool:Boolean = false;
			var i:int = 0;
			while(bool==false&&i<viewstackToShow.getChildren().length){
				if(viewstackToShow.getChildren()[i]["data"]==newPage){
					viewstackToShow.selectedChild = viewstackToShow.getChildren()[i];
					bool = true;
				}
				i++;
			}
		}
		
		/**
		 * Cette function est l'évenement déclenché lors du clic sur un bouton
		 * @param event L'évènvement ayant déclenché l'appel de la méthode
		 */ 
		private function eventClickMenu(event:Event):void{
			changerPage(event.currentTarget["data"]);
		}
		
		/**
		 * Cette function est lancée une fois le fichier xml de définition des menu chargé
		 * @param l'eventment ayant lancé la fonction
		 */ 
		private function createMenuEvent(event:Event):void{
			var modele:XML = new XML(event.target.data);
			
			var menus:Array = new Array();
			var menuNodes:XMLList = modele.children();
			
			for(var i:int = 0;i<menuNodes.length();i++){
				createMenuFromXml((menuNodes[i] as XML),accordionToShow);
			}
		}
		
			
		/**
		 * Fonction récursive permettant de créer les menus.
		 * @param menuNodes L'emplacement actuel pour le parsing du fichier xml
		 */ 
		private function createMenuFromXml(menuNodes:XML,accordionToComplete:Accordion):void{
			
				var currentCanvas:Panel = new Panel(); 
				
				currentCanvas.styleName = "Panel";
				var newLabel:String = menuNodes.@label;
				currentCanvas.label = newLabel;
				currentCanvas.horizontalScrollPolicy="off";
				currentCanvas.verticalScrollPolicy="off";
				var currentNewAccordion:Accordion = new Accordion();
				
				var menuNodesItems:XMLList = menuNodes.children();
				
				for(var j:int = 0;j<menuNodesItems.length();j++){
						if((menuNodesItems[j] as XML).name()=="menu"){
							
							createMenuFromXml((menuNodesItems[j] as XML),currentNewAccordion);
							currentCanvas.addChild(currentNewAccordion);
						}			
						else{			
							var currentMenuItem:LinkButton = new LinkButton();
							var newLabelItem:String = menuNodesItems[j].@label;
							currentMenuItem.label = newLabelItem;
							currentMenuItem.data=menuNodesItems[j].@lien;
							
							currentMenuItem.addEventListener(MouseEvent.CLICK,eventClickMenu);
							currentMenuItem.width = 200;
							currentCanvas.addChild(currentMenuItem);
						}
				}
				accordionToComplete.addChild(currentCanvas);
		}
		
		/**
		 * Cette fonction est appellée pour créer les menus, elle va faire appel au fichier xml décrivant le menu 
		 */ 
		public function createMenu():void{
			var service:URLLoader = new URLLoader(new URLRequest(filesDirectory+'menu.xml'));
			service.addEventListener(Event.COMPLETE,createMenuEvent);
		}
		
		/**
		 * Cette fonction charge un fichier xml si nécessaire pour changer de page
		 */ 
		public function loadPageFromXML(nameOfFile:String):void{
			
			var bool:Boolean = false;
			var i:int = 0;
			while(bool==false&&i<viewstackToShow.getChildren().length){
				if(viewstackToShow.getChildren()[i]["id"]==nameOfFile){
					bool = true;
				}
				i++;
			}
			
			if(bool == true){
				viewstackToShow.selectedChild = viewstackToShow.getChildren()[i];
			}
			else{
				
			}
		}
		
	}
}